#include <iostream>
#include <unistd.h>
#include <vector>
#include <cstdio>
#include "Thread.hpp"

// //1、非类模板版本
// //应用方的视角
// std::string GetThreadName()
// {
//     static int number = 1;
//     char name[64];
//     snprintf(name, sizeof(name), "Thread-%d", number++);
//     return name;
// }

// void Print()
// {
//     while(true)
//     {
//         std::cout << "hello world: " << std::endl;
//         sleep(1);
//     }
// }

// int main()
// {
//     //1.初步排序
//     // Thread t(Print, GetThreadName());
//     // std::cout << "is thread running? " << t.IsRunning() << std::endl;
//     // t.Start();
//     // std::cout << "is thread running? " << t.IsRunning() << std::endl;
//     // t.Join();
//     // return 0;

//     //2.
//     const int num = 5;
//     std::vector<Thread> threads;
    
//     for(int i = 0; i < num; i++)
//     {
//         threads.push_back(Thread(Print, GetThreadName()));
//     }

//     for(auto &t : threads)
//     {
//         std::cout << t.ThreadName() << ", is running: " << t.IsRunning() << std::endl;
//     }

//     for(auto &t : threads)
//     {
//         t.Start();
//     }

//     for(auto &t : threads)
//     {
//         std::cout << t.ThreadName() << ", is running: " << t.IsRunning() << std::endl;
//     }

//     for(auto &t : threads)
//     {
//         t.Join();
//     }
// }



//2、带模板版本
//应用方的视角
std::string GetThreadName()
{
    static int number = 1;
    char name[64];
    snprintf(name, sizeof(name), "Thread-%d", number++);
    return name;
}

void Print(int num)
{
    while(num)
    {
        std::cout << "hello world: " << num-- << std::endl;
        sleep(1);
    }
    
}

int main()
{
    Thread<int> t(GetThreadName(), Print, 10);

    t.Start();
    t.Join();
    return 0;
}